package run;

/**
 * 静态变量、代码块、方法
 *
 * @author wei.yang on 2018/8/11
 */
public class StaticRun {

    public static void main(String[] args) throws ClassNotFoundException {
        //staticExecute();
        //staticInner();
        //nonStaticInner();
        //这个会初始化静态代码及变量
        forNameLoad();
        //只是加载到了内存
        //classloaderLoad();
    }

    private static void forNameLoad() throws ClassNotFoundException {
        Class.forName(Child.class.getName());
    }

    private static void classloaderLoad() throws ClassNotFoundException {
        ClassLoader.getSystemClassLoader().loadClass(Child.class.getName());
    }

    /**
     * 只是看一下执行顺序
     */
    public static void staticExecute() {
        new Child();
    }

    /**
     * 静态内部类
     */
    private static void staticInner() {
        new Child.ChildInner();
    }

    /**
     * 非静态内部类: 创建一个内部类【非静态】，内部类要持有一个对外部类的引用【要求】
     */
    private static void nonStaticInner() {
        Child.Inner inner = new Child().new Inner();
        inner.print();
    }
}
